#ifndef LOGGER_H
#define LOGGER_H

#include <stdio.h>

// 日志等级定义
typedef enum {
    LOG_LEVEL_DEBUG,   // 调试信息
    LOG_LEVEL_INFO,    // 普通信息
    LOG_LEVEL_WARN,    // 警告信息
    LOG_LEVEL_ERROR,   // 错误信息
    LOG_LEVEL_FATAL,   // 致命错误
    LOG_LEVEL_NONE     // 关闭所有日志
} LogLevel;

// 初始化日志系统（可选，用于自动检测颜色支持）
void log_init(void);

// 设置全局日志等级
void _set_log_level(LogLevel level);

// 获取当前日志等级（用于宏判断）
LogLevel get_log_level(void);

// 启用/禁用颜色输出
void log_enable_color(int enable);

// 各等级日志的快捷宏（带等级检查）
#define LOG_DEBUG(format, ...) do { \
    if (LOG_LEVEL_DEBUG >= get_log_level()) { \
        log_output(LOG_LEVEL_DEBUG, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__); \
    } \
} while(0)

#define LOG_INFO(format, ...) do { \
    if (LOG_LEVEL_INFO >= get_log_level()) { \
        log_output(LOG_LEVEL_INFO, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__); \
    } \
} while(0)

#define LOG_WARN(format, ...) do { \
    if (LOG_LEVEL_WARN >= get_log_level()) { \
        log_output(LOG_LEVEL_WARN, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__); \
    } \
} while(0)

#define LOG_ERROR(format, ...) do { \
    if (LOG_LEVEL_ERROR >= get_log_level()) { \
        log_output(LOG_LEVEL_ERROR, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__); \
    } \
} while(0)

#define LOG_FATAL(format, ...) do { \
    if (LOG_LEVEL_FATAL >= get_log_level()) { \
        log_output(LOG_LEVEL_FATAL, __FILE__, __LINE__, __func__, format, ##__VA_ARGS__); \
    } \
} while(0)

// 内部使用函数声明
void log_output(LogLevel level, const char* file, int line, 
                const char* func, const char* format, ...);

#endif 


// 使用示例
// #include "log.h"
// #include <unistd.h>

// // 模拟耗时操作
// int expensive_calculation() {
//     printf("Performing expensive calculation...\n");
//     return 42;
// }

// int main() {
    
//     // 设置日志级别为 WARN
//     set_log_level(LOG_LEVEL_WARN);
    
//     // 这些日志不会输出，也不会调用expensive_calculation()
//     LOG_DEBUG("Debug: %d", expensive_calculation());
//     LOG_INFO("Info: %d", expensive_calculation());
    
//     // 这些日志会输出
//     LOG_WARN("Warning: Low resources");
//     LOG_ERROR("Error: File not found");
    
//     // 提升日志级别
//     set_log_level(LOG_LEVEL_DEBUG);
//     LOG_DEBUG("Debug now visible: %d", expensive_calculation());
    
//     return 0;
// }